package com.hinnotek.amoeba.ui.activity.old

import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import com.chad.library.adapter.base.BaseQuickAdapter
import com.lee.common.base.BaseActivity
import com.hinnotek.amoeba.R
import com.hinnotek.amoeba.adapters.old.PayBackListAdapter
import com.hinnotek.amoeba.bean.old.PBListBean
import com.hinnotek.amoeba.databinding.ActivityInvoiceBinding
import com.hinnotek.amoeba.dialog.CustomDialog
import com.hinnotek.amoeba.ext.init
import com.hinnotek.amoeba.utilities.IntentUtils
import com.hinnotek.amoeba.utilities.StatusBarUtil
import com.hinnotek.amoeba.utilities.ToastUtils
import com.hinnotek.amoeba.ext.initAdapter
import com.hinnotek.amoeba.viewmodels.ContractViewModel
import com.lee.common.network.net.ObserverState
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.xuexiang.xui.utils.ResUtils

class PayBackListActivity : BaseActivity<ActivityInvoiceBinding>() {
    private var mAdapter: PayBackListAdapter? = null
    private var pageNo = 1
    private val pageSize = 20

    private val viewModel by viewModels<ContractViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setLeftVisible(true)
        setTitle("回款")

        setContentView(R.layout.activity_invoice)
        initVew()
    }

    override fun initVew() {
        StatusBarUtil.setStatusBarColor(this, R.color.colorbtns)
        bindingView.recyclerView.init()
        bindingView.recyclerView.adapter = PayBackListAdapter().also { mAdapter = it }
        mAdapter?.setOnItemClickListener { adapter: BaseQuickAdapter<*, *>, _: View?, position: Int ->
            val data = adapter.getItem(position) as PBListBean
            val bundle = Bundle()
            bundle.putInt("companyContractId", data.companyContractId)
            IntentUtils.startActivity(mContext, PayBackModifyActivity::class.java, bundle)
        }
        findViewById<View>(R.id.rb_invoice_search).setOnClickListener { v: View? -> }
        setData()
    }

    override fun setData() {

        bindingView.mscSearch.initAdapter(ResUtils.getStringArray(R.array.sort_mode_entry))

        //下拉刷新
        bindingView.refreshLayout.setOnRefreshListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo = 1
                    getCompanyContractPageByUnComplete()
                    refreshLayout.finishRefresh()
                }, 0
            )
        }
        //上拉加载
        bindingView.refreshLayout.setOnLoadMoreListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo++
                    getCompanyContractPageByUnComplete()
                    refreshLayout.finishLoadMore()
                }, 0
            )
        }
    }

    override fun onResume() {
        super.onResume()
        bindingView.refreshLayout.autoRefresh() //第一次进入触发自动刷新，演示效果
    }//将不会再次触发加载更多事件//setNoMoreData(false);


    /**
     * app端获取回款未完成的所有合同的分页接口
     */
    private fun getCompanyContractPageByUnComplete() {
        val customDialog = CustomDialog(mContext, "正在加载...")
        customDialog.show()
        viewModel.getCompanyContractPageByUnComplete(pageNo, pageSize)
            .observe(this, object : ObserverState<MutableList<PBListBean>>() {
                override fun onDataChange(data: MutableList<PBListBean>) {
                    customDialog.dismiss()
                    if (pageNo == 1) {
                        when (getRefreshStatus(data.size)) {
                            Status.SUCCESS -> {
                                mAdapter?.setList(data)
                                if (data.size < pageSize) {
                                    bindingView.refreshLayout.setEnableLoadMore(false)
                                } else {
                                    bindingView.refreshLayout.setEnableLoadMore(true)
                                }
                                bindingView.refreshLayout.resetNoMoreData() //setNoMoreData(false);
                                bindingView.llStateful.showContent()
                            }
                            Status.EMPTY -> {
                                bindingView.llStateful.showEmpty()
                                bindingView.refreshLayout.setEnableLoadMore(false)
                            }
                            Status.ERROR -> showError()
                            Status.NO_NET -> showOffline()
                        }
                        bindingView.refreshLayout.finishRefresh()
                    } else {
                        if (data.size == 0) {
                            ToastUtils.showShort("数据全部加载完毕")
                            bindingView.refreshLayout.finishLoadMoreWithNoMoreData() //将不会再次触发加载更多事件
                        } else {
                            mAdapter?.addData(data.toMutableList())
                            bindingView.refreshLayout.finishLoadMore()
                        }
                    }
                    super.onDataChange(data)
                }

                override fun onError(msg: String?, code: Int) {
                    customDialog.dismiss()
                    ToastUtils.showShort(mContext, msg)
                    super.onError(msg, code)
                }
            })

    }

    private fun showOffline() {
        bindingView.llStateful.showOffline { v: View? -> bindingView.refreshLayout.autoRefresh() }
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private fun showError() {
        bindingView.llStateful.showError { v: View? -> bindingView.refreshLayout.autoRefresh() }
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private enum class Status {
        SUCCESS, EMPTY, ERROR, NO_NET
    }

    private fun getRefreshStatus(size: Int): Status {
        return if (size == 0) {
            Status.EMPTY
        } else Status.SUCCESS
    }
}